//package com.hlf.robot.listener;
//
//import catcode.CatCodeUtil;
//import com.alibaba.fastjson.JSONObject;
//import com.hlf.robot.utils.OkHttpUtil;
//import lombok.extern.slf4j.Slf4j;
//import love.forte.common.ioc.annotation.Beans;
//import love.forte.common.ioc.annotation.Depend;
//import love.forte.simboot.annotation.ContentTrim;
//import love.forte.simboot.annotation.Filter;
//import love.forte.simboot.annotation.Listener;
//import love.forte.simbot.annotation.OnGroup;
//import love.forte.simbot.annotation.OnPrivate;
//import love.forte.simbot.api.message.*;
//import love.forte.simbot.api.message.events.GroupMsg;
//import love.forte.simbot.api.message.events.MessageGet;
//import love.forte.simbot.api.message.events.PrivateMsg;
//import love.forte.simbot.api.sender.MsgSender;
//import love.forte.simbot.api.sender.Sender;
//import love.forte.simbot.event.GroupMessageEvent;
//import org.springframework.util.StringUtils;
//
//import java.io.IOException;
//
///**
// * @program: qq-bot
// * @description: 监听器类
// *  私聊消息监听的示例类。
// *  所有需要被管理的类都需要标注 {@link Beans} 注解。
// * @author: K.faWu
// * @create: 2022-04-28 14:18
// **/
//
///**
//
// */
//@Beans
//@Slf4j
//public class MyListener {
//
//    /**
//     * 通过依赖注入获取一个 "消息正文构建器工厂"。
//     *
//     */
//    @Depend
//    private MessageContentBuilderFactory messageContentBuilderFactory;
//
//    /**
//     * 此监听函数监听一个私聊消息，并会复读这个消息，然后再发送一个表情。
//     * 此方法上使用的是一个模板注解{@link OnPrivate}，
//     * 其代表监听私聊。
//     * 由于你监听的是私聊消息，因此参数中要有个 {@link PrivateMsg} 来接收这个消息实体。
//     *
//     * 其次，由于你要“复读”这句话，因此你需要发送消息，
//     * 因此参数中你需要一个 "消息发送器" {@link Sender}。
//     *
//     * 当然，你也可以使用 {@link love.forte.simbot.api.sender.MsgSender}，
//     * 然后 {@code msgSender.SENDER}.
//     */
//    @OnPrivate
//    public void replyPrivateMsg1(PrivateMsg privateMsg, Sender sender){
//        // 获取消息正文。
//        MessageContent msgContent = privateMsg.getMsgContent();
//
//
//        // 向 privateMsg 的账号发送消息，消息为当前接收到的消息。
//        sender.sendPrivateMsg(privateMsg, msgContent);
//
//        // 再发送一个表情ID为'9'的表情。
//        // 方法1：使用消息构建器构建消息并发送
//        // 在绝大多数情况下，使用消息构建器所构建的消息正文 'MessageContent'
//        // 是用来发送消息最高效的选择。
//        // 相对的，MessageContentBuilder所提供的构建方法是十分有限的。
//
//        // 获取消息构建器
//        MessageContentBuilder msgBuilder = messageContentBuilderFactory.getMessageContentBuilder();
//        // 通过.text(...) 向builder中追加一句话。
//        // 通过.face(ID) 向builder中追加一个表情。
//        // 通过.build() 构建出最终消息。
//        MessageContent msg = msgBuilder.text("表情：").face(9).build();
//
//        // 直接通过这个msg发送。
//        sender.sendPrivateMsg(privateMsg, msg);
//
//        // 方法2：使用CAT码发送消息。
//        // 使用CAT码构建一个需要解析的消息是最灵活的，
//        // 但是相对的，它的效率并不是十分的可观，毕竟在这其中可能会涉及到很多的'解析'操作。
//
//        // 获取CAT码工具类实例
//        CatCodeUtil catCodeUtil = CatCodeUtil.getInstance();
//
//        // 构建一个类型为 'face', 参数为 'id=9' 的CAT码。
//        // 有很多方法。
//
//        // 1. 通过 codeBuilder 构建CAT码
//         String cat1 = catCodeUtil.getStringCodeBuilder("face", false).key("id").value(9).build();
//
//        // 2. 通过CatCodeUtil.toCat 构建CAT码
//         String cat2 = catCodeUtil.toCat("face", "id=9");
//
//        // 3. 通过模板构建CAT码
//        String cat3 = catCodeUtil.getStringTemplate().face(9);
//
//        // 在cat码前增加一句 '表情' 并发送
//        sender.sendPrivateMsg(privateMsg, "表情：" + cat3);
//
//    }
//
//    static final String URL = "http://api.qingyunke.com/api.php";
//
//    @Listener
//    @Filter(value = "你好", targets = @Filter.Targets(atBot = true))
//    @ContentTrim // 当匹配被at时，将'at'这个特殊消息移除后，剩余的文本消息大概率存在前后空格，通过此注解在匹配的时候忽略前后空格
//    public void onChannelMessage(GroupMessageEvent event) { // 将要监听的事件类型放在参数里，即代表监听此类型的消息
//        // ...
//        // Java中的阻塞式API
//        event.replyBlocking("机器人测试自动回复!");
//    }
//
//    /**
//     * 监听私聊消息
//     */
//    @OnPrivate
//    public void privateMsg(PrivateMsg privateMsg, MsgSender sender) throws IOException {
//        log.info("进入监听私聊消息=========");
//        // 智能聊天
//        sendMsg(privateMsg, sender, false);
//    }
//
//
//    /**
//     * 监听群消息
//     */
//    @OnGroup
//    public ReplyAble groupMsg(GroupMsg groupMsg, MsgSender sender) throws IOException {
//        log.info("进入监听群聊消息==========");
//        // 默认关闭群聊模式，需要的话把注释去掉
//        return sendMsg(groupMsg, sender, true);
////        return null;
//    }
//
//    /**
//     * 通过青客云封装智能聊天
//     *
//     * @param commonMsg commonMsg
//     * @param sender    sender
//     */
//    private ReplyAble sendMsg(MessageGet commonMsg, MsgSender sender, boolean group) throws IOException {
//        log.info("智能聊天中~~~,接收消息：qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(),
//                commonMsg.getMsgContent().getMsg());
//        // MsgSender中存在三大送信器，以及非常多的重载方法。
//        // 通过get请求调用聊天接口
//        final String result = String.valueOf(OkHttpUtil.doGet(URL.concat("?key=free&appid=0&msg=").concat(commonMsg.getMsgContent().getMsg())));
//        if (!StringUtils.isEmpty(result)) {
//            final JSONObject json = JSONObject.parseObject(result);
//            if (json.getInteger("result") == 0 && !StringUtils.isEmpty(json.getString("content"))) {
//                final String msg = json.getString("content").replace("{br}", "\n");
//                log.info("智能聊天中~~~,发送消息：qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(), msg);
//                //发送群消息
//                if (group) {
//                    // 参数1：回复的消息 参数2：是否at当事人
//                    return Reply.reply(msg, true);
//                }
//                //发送私聊消息
//                sender.SENDER.sendPrivateMsg(commonMsg, msg);
//            }
//        }
//        return null;
//    }
//}
